{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# 用聚类分析处理无标签数据"
   ]
  },
  {
   "cell_type": "markdown",
   "source": [
    "## k-means聚类\n",
    "![](picture/聚类2.png)\n",
    "![](picture/聚类1.png)\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import make_blobs\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "X, y = make_blobs(n_samples=150,\n",
    "                  n_features=2,\n",
    "                  centers=3,\n",
    "                  cluster_std=0.5,\n",
    "                  shuffle=True,\n",
    "                  random_state=0)\n",
    "\n",
    "plt.scatter(X[:, 0], X[:, 1],\n",
    "            c='white', marker='o', edgecolor='black', s=50)\n",
    "plt.grid()\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_01.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [],
   "source": [
    "from sklearn.cluster import KMeans\n",
    "\n",
    "km = KMeans(n_clusters=3,\n",
    "            n_init=10,  #设置n_init=10执行10次独立的k-均值聚类算法，每次计算随机选用不同的中心，选择SSE最低的为最终模型。\n",
    "            init='random',\n",
    "            max_iter=300,\n",
    "            tol=1e-05,  #误差允许值\n",
    "            random_state=1,\n",
    "            )\n",
    "y_km = km.fit_predict(X)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA/z0lEQVR4nO3deXhURdbA4V91EkhCIhBQRIIJhEVUdgZxYJSgooICBjWjqIyD4oIIw6As7oqigoKoKBpFQBAUcMPIohgxfgMOYUDAsGZYIjrskIQ9Xd8foWOn08vtpJfb3ed9njxC+nZ3VQfvSVWdOqW01gghhBBmYwl2A4QQQghnJEAJIYQwJQlQQgghTEkClBBCCFOSACWEEMKUov3xovXr19epqan+eOmAKykpoVatWsFuRlBEat+l35EnUvtuln7n5eXt11qf6/h9vwSo1NRUVq9e7Y+XDricnBy6d+8e7GYERaT2XfodeSK172bpt1Jqp7PvyxSfEEIIU5IAJYQQwpQkQAkhhDAlv6xBCSFEODl9+jSFhYWcOHEi2E3xqdq1a5Ofnx+w94uNjSU5OZmYmBhD10uAEkIIDwoLC0lMTCQ1NRWlVLCb4zNFRUUkJiYG5L201hw4cIDCwkKaNGli6DkyxSeEEB6cOHGCevXqhVVwCjSlFPXq1fNqFCojKCE8yMvLY+68eS4f/2tmJh07dvTb84U5SHCqPm8/QwlQQniwc+dO3pw6lYz7Hq7wP5jWmoXTpnB5ly5uA0x1ny/+IME+skiAEsKDfv36kZKSSkrLi+l45VXl38/L+YbU1Cb069fPr88Xf5BgX9HTTz9NQkICI0eO9Op5hw8fZs6cOdx5553Vev833niDyZMns337dvbt20f9+vWr9XqOJEAJ4YHFYuG5Z57miXEv0OGKHiil0FqzYOqrPP/M01gs7pdyq/t8f3A2Emnbti2PPPooYN6RiNmDfZ2kOhw5dMTl47Xr1ubwwcOBa5ALhw8fZurUqV4FKK01WusK/167du3KDTfc4LdqFJIkIYQBGRkZcPoUa1YsB2DN999iKT3DTTfdFJDn+5ptJPJbaTS/W2P43RrDaa34rTSaN6dOZedOp5Vngs4W7BdOfRXbaeC2YP9ckIK9vSOHjjD54GSXX+6ClyczZ86kTZs2tG3b1mlg6d69e3mJuf3792Orh7px40Y6d+5Mu3btaNOmDVu3bmX06NFs376drl278sgjjwAwYcIE/vSnP9GmTRueeuopAHbs2EGrVq148MEH6dChA7t3767wnu3bt8efdVclQAlhgOON0dsbYnWf72v2I5Gb7n2Im+59iLrnnktKi1amGIm4Y7ZgHwgbN27k+eefZ/ny5axbt47XXnvN8HPffvtthg0bxtq1a1m9ejXJycm8+OKLpKWl8eOPPzJhwgSWLl3K1q1b+emnn1i7di15eXmsWLECgM2bN3PXXXfxn//8h5SUFH910SkJUEIYZLsxZj03tko3xOo+35ecjUTQBD1wGmG2YB8Iy5cv5+abby5f40lKSjL83Msvv5wXXniBl156iZ07dxIXF1fpmqVLl7J06VLat29Phw4d2LRpE1u3bgUgJSWFLl26+KYjXgrfn6gQPma7MS6eM6NKN8TqPt/XHEcix4qLgh44jTJTsA8ErbXHFO3o6GisVitAhb1Gt99+O1988QVxcXFce+21LF++3OnrjxkzhrVr17J27Vq2bdvGoEGDAIJ6HIcEKCG8kJGRwfvvv1/lG2J1n+9LjiORQ3v/Z4rAaYTZgr2/XXXVVXz88cccOHAAgIMHD1a6JjU1lby8PADmz59f/v2CggKaNm3Kww8/TJ8+ffj5559JTEykqKio/Jprr72W999/n+LiYgB+/fVX9u7d688uGRLeP1UhfMxisXD33XdX+YZY3ef7mv1IBLQpAqdRZgr2/nbJJZfw2GOPceWVV9K2bVtGjBhR6ZqRI0fy1ltv8ec//5n9+/eXf3/evHlceumltGvXjk2bNnHXXXdRr149unbtymWXXcYjjzxCz549uf3227n88stp3bo1N998c4UA5sqUKVNITk6msLCQNm3acM899/i036p8/tmHOnXqpOXAwtAXqX2PtH7Pnz+fW265haysLDZt3uz0GrOlnft6w66nn3l+fj6tWrXy+DpKKSYfnOzy8eFJw/HHPbeqAlmLz8bZZ6mUytNad3K8VvZBCRHhMjIyGDJkCEeOHuW30uiQ2ABr1g27tevWZnjScLePC+MMBSil1A6gCCgFzjiLdEKI0GSxWJgyZQpvvfW2aTfAOjLrhl0zbMINJ95MhKdrrdtJcBIi/FgsFi64oKFpN8A6MvuGXeEb8lMUQgBQt27dkNoAG4kbdiONoSQJpdR/gUOABqZprd9xcs1g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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X[y_km == 0, 0],\n",
    "            X[y_km == 0, 1],\n",
    "            s=50, c='lightgreen',\n",
    "            marker='s', edgecolor='black',\n",
    "            label='cluster 1')\n",
    "plt.scatter(X[y_km == 1, 0],\n",
    "            X[y_km == 1, 1],\n",
    "            s=50, c='orange',\n",
    "            marker='o', edgecolor='black',\n",
    "            label='cluster 2')\n",
    "plt.scatter(X[y_km == 2, 0],\n",
    "            X[y_km == 2, 1],\n",
    "            s=50, c='lightblue',\n",
    "            marker='v', edgecolor='black',\n",
    "            label='cluster 3')\n",
    "plt.scatter(km.cluster_centers_[:, 0],  #聚类的中心点\n",
    "            km.cluster_centers_[:, 1],\n",
    "            s=250, marker='*',\n",
    "            c='red', edgecolor='black',\n",
    "            label='centroids')\n",
    "plt.legend(scatterpoints=1)\n",
    "plt.grid()\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_02.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## k-Means ++\n",
    "![](picture/聚类3.png)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "![](picture/聚类4.png)\n",
    "![](picture/聚类5.png)\n",
    "![](picture/聚类6.png)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 最佳聚类数"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Distortion: 72.48\n"
     ]
    }
   ],
   "source": [
    "#SSE\n",
    "print('Distortion: %.2f' % km.inertia_)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAo6klEQVR4nO3deXxc5X3v8c9vZrR7kYXGji0bbIxkbKBgcAyERCIsMQResZPctCZN65vS0qaUQJqQ4jTJbZKSQGkoufeG5tJsbsMN9U1JcAhlqQM2EJbILDG28YKN8YYtL/KiffndP+bIHssjabSMzkjzfb9e85ozz5wz85sB++vnnGeex9wdERGRbBMJuwAREZFUFFAiIpKVFFAiIpKVFFAiIpKVFFAiIpKVYmEXMBjl5eU+ffr0sMsQEZFBWLNmzX53j3dvH9EBNX36dGpra8MuQ0REBsHMtqdq1yk+ERHJSgooERHJSgooERHJSgooERHJSgooERHJSgooERHJSiN6mPlg/OLVXdzzxEZ21zcxpbSI2xfMYtHcirDLEhGRQE4G1C9e3cXSh9fS1NYBwK76JpY+vBZAISUikiVy8hTfPU9sPB5OXZraOrjniY0hVSQiIt3lZEDtrm/qV7uIiAy/jAWUmc0ys9eSbkfM7DYzKzOzp8xsc3A/IemYpWa2xcw2mtmCTNU2pbSoX+0iIjL8MhZQ7r7R3S9w9wuAi4BG4OfAHcBKd68EVgaPMbM5wGLgHOAa4H4zi2aittsXzKIo7+SXLsqLcvuCWZl4OxERGYDhOsV3JfCWu28HFgLLgvZlwKJgeyHwkLu3uPs2YAswPxPFLJpbwbc+dh4VQY8pasY3P3quBkiIiGSR4QqoxcBPg+1J7r4HILifGLRXADuSjtkZtJ3EzG4ys1ozq62rqxtwQYvmVvD8HVdw50fPpcOd86aOH/BriYjI0Mt4QJlZPvAR4P/1tWuKNj+lwf0Bd5/n7vPi8VOWD+m36srEa6zatH/QryUiIkNnOHpQ1wKvuPve4PFeM5sMENzvC9p3AtOSjpsK7M50cdPKijkzXsLqTQPvjYmIyNAbjoC6gROn9wBWAEuC7SXAI0nti82swMxmAJXAy8NQH9WVcV7ceoDmbr+NEhGR8GQ0oMysGLgaeDip+S7gajPbHDx3F4C7rwOWA+uBx4Gb3X1YEqNmVpyW9k5e3nZwON5ORETSkNGpjty9ETitW9sBEqP6Uu1/J3BnJmtK5ZIZp5Efi7B6Ux3VVYO/riUiIoOXkzNJdFeUH2X+9DJW6TqUiEjWUEAFaqribN53TNMdiYhkCQVUoOvU3rOb1YsSEckGCqhA1aQxvGdcoU7ziYhkCQVUwMyorirnuc37ae/oDLscEZGcp4BKUl0V50hzO6/vPBx2KSIiOU8BleT9Z5UTMXSaT0QkCyigkpQW53P+tFJNeyQikgUUUN1UV8b53c56DjW0hl2KiEhOU0B1U10Vp9PhuS2a3VxEJEwKqG7Onzqe8UV5Os0nIhIyBVQ3sWiE959VzurNdbifshyViIgMEwVUCtVV5ew90sLGvUfDLkVEJGcpoFLomvZIp/lERMKjgEph8vgiqiaNYbWWgRcRCY0CqgfVlXFe3naQxtb2sEsREclJCqge1MyK09rRyUtbtcquiEgYFFA9eO/0MgrzIpr2SEQkJAqoHhTmRbl4xmkaKCEiEhIFVC9qquJs3d/AjoONYZciIpJzFFC9OD7cXKvsiogMOwVUL2bGS6goLWLVRgWUiMhwy2hAmVmpmf3MzN40sw1mdqmZlZnZU2a2ObifkLT/UjPbYmYbzWxBJmtLR2KV3Ti/eesAbVplV0RkWGW6B/Ud4HF3Pxs4H9gA3AGsdPdKYGXwGDObAywGzgGuAe43s2iG6+tTTVU5x1raefWd+rBLERHJKRkLKDMbB1QDPwBw91Z3rwcWAsuC3ZYBi4LthcBD7t7i7tuALcD8TNWXrvedVU40YqzatC/sUkREckome1BnAnXAj8zsVTP7vpmVAJPcfQ9AcD8x2L8C2JF0/M6gLVTjCvO48PRSTXskIjLMMhlQMeBC4J/dfS7QQHA6rweWou2U9S7M7CYzqzWz2rq64Rm8UF0ZZ+2uw+w/1jIs7yciIpkNqJ3ATnd/KXj8MxKBtdfMJgME9/uS9p+WdPxUYHf3F3X3B9x9nrvPi8fjGSs+Wddw8+c2qxclIjJcMhZQ7v4usMPMZgVNVwLrgRXAkqBtCfBIsL0CWGxmBWY2A6gEXs5Uff1xXsV4ykryNauEiMgwimX49W8BHjSzfGAr8GkSobjczG4E3gE+AeDu68xsOYkQawdudveODNeXlkjEglV299PZ6UQiqc5GiojIUMpoQLn7a8C8FE9d2cP+dwJ3ZrKmgaquirPi9d2s33OEcyvGh12OiMiop5kk0lRdWQ5o2iMRkeGigErTxHGFzJ48TtehRESGiQKqH6qryql9+xDHWrTKrohIpimg+qGmKk57p/PCWwfCLkVEZNRTQPXDvDPKKM6P6jSfiMgwUED1Q34swqVnnqZl4EVEhoECqp9qZsV552Ajb+9vCLsUEZFRTQHVT9WVWmVXRGQ4KKD6aXp5CaeXFWuVXRGRDFNADUBNVZwXth6gtV2r7IqIZIoCagCqq+I0tnZQu/1g2KWIiIxaCqgBuHTmaeRFTaP5REQySAE1AGMKYlx0xgStsisikkEKqAGqroqzYc8R9h1pDrsUEZFRSQE1QDVVXcPN1YsSEckEBdQAzX7POMrHFGjaIxGRDFFADVAkYlRXlvPs5jo6Oj3sckRERh0F1CDUzIpzqLGNN3YdDrsUEZFRRwE1CO8/qxwzdJpPRCQDFFCDcNqYAs6dMl7z8omIZIACapBqquK88k49R5rbwi5FRGRUUUANUnVVnI5O5zdbNNxcRGQoKaAGae7ppYwpiLFKs0qIiAypjAaUmb1tZmvN7DUzqw3ayszsKTPbHNxPSNp/qZltMbONZrYgk7UNlbxohMvOOo3Vm+pw13BzEZGhMhw9qA+6+wXuPi94fAew0t0rgZXBY8xsDrAYOAe4BrjfzKLDUN+gVVfF2VXfxFt1WmVXRGSohHGKbyGwLNheBixKan/I3VvcfRuwBZg//OX13/FVdjXcXERkyGQ6oBx40szWmNlNQdskd98DENxPDNorgB1Jx+4M2k5iZjeZWa2Z1dbVZUcgTCsr5sx4iZbfEBEZQpkOqMvc/ULgWuBmM6vuZV9L0XbKRR13f8Dd57n7vHg8PlR1Dlp1ZZyXth2gua0j7FJEREaFjAaUu+8O7vcBPydxym6vmU0GCO73BbvvBKYlHT4V2J3J+oZSTVWc5rZOfvu2VtkVERkKGQsoMysxs7Fd28CHgDeAFcCSYLclwCPB9gpgsZkVmNkMoBJ4OVP1DbWLzywjPxbRdSgRkSGSyR7UJOA5M3udRND8yt0fB+4CrjazzcDVwWPcfR2wHFgPPA7c7O4j5nxZcX6M+dPLdB1KRGSIxDL1wu6+FTg/RfsB4MoejrkTuDNTNWVadVU533zsTfYcbmLy+KKwyxERGdE0k8QQqqlKDEh8VrNKiIgMmgJqCFVNGsN7xhXqNJ+IyBBQQA0hM+MDleU8t2W/VtkVERkkBdQQq5kV53BTG6/vrA+7FBGREU0BNcTef1Y5EYNVG3WaT0RkMBRQQ6y0OJ/fm1qqVXZFRAZJAZUBNVVxXt9RT31ja9iliIiMWAqoDKiuitPp8JxW2RURGTAFVAacP3U84wpjmvZIRGQQFFAZEItG+EBlnNWb9muVXRGRAVJAZUh1VTnvHmlm095jYZciIjIiKaAypLpKq+yKiAxG2gFlZlEzm2Jmp3fdMlnYSDd5fBFVk8ZouLmIyAClNZu5md0C/A9gL9AZNDvwexmqa1Sorozzry9up6m1g6L8aNjliIiMKOn2oG4FZrn7Oe5+XnBTOPWhuipOa3snL247EHYpIiIjTroBtQM4nMlCRqP5M8oozNMquyIiA5HugoVbgWfM7FdAS1eju9+bkapGicK8KBfPOE3Lb4iIDEC6Pah3gKeAfGBs0k36UF0VZ2tdAzsPNYZdiojIiJJWD8rdvwZgZmMTD10/7klTTVWcbwCrN+3nkxdr4KOISLrS6kGZ2blm9irwBrDOzNaY2TmZLW10mBkvoaK0iFWb9oVdiojIiJLuKb4HgL929zPc/Qzg88C/ZK6s0cPMqK4q5zdbDtDW0dn3ASIiAqQfUCXu/nTXA3d/BijJSEWjUE1VnKMt7by2oz7sUkRERox0A2qrmX3FzKYHty8D29I5MJiB4lUzezR4XGZmT5nZ5uB+QtK+S81si5ltNLMF/f842el9Z5UTjZhW2RUR6Yd0A+pPgDjwMPDzYPvTaR57K7Ah6fEdwEp3rwRWBo8xsznAYuAc4BrgfjMbFdMvjCvMY+40rbIrItIfaQWUux9y98+6+4XuPtfdb3X3Q30dZ2ZTgeuA7yc1LwSWBdvLgEVJ7Q+5e4u7bwO2APPT/BxZr6YqztpdhzlwrKXvnUVEpPeAMrP7gvtfmtmK7rc0Xv8+4IucmL8PYJK77wEI7icG7RUkZqzosjNo617TTWZWa2a1dXUjp0dSXRXHtcquiEja+vod1L8F9//Y3xc2s+uBfe6+xswuT+eQFG2nrPbn7g+QGFXIvHnzRsxqgOdWjGdCcR6rNtWx8IJTcldERLrpNaDcfU2weYG7fyf5OTO7FVjVy+GXAR8xsw8DhcA4M/sJsNfMJrv7HjObDHT9QGgnMC3p+KnA7vQ/SnaLRuz4KrudnU4kkiqPRUSkS7qDJJakaPvvvR3g7kvdfaq7Tycx+OHX7v4pYEXS6y0BHgm2VwCLzazAzGYAlcDLadY3IlRXxdl/rIUN7x4JuxQRkazXaw/KzG4APgmc2e2a01hgoGtI3AUsN7MbSczx9wkAd19nZsuB9UA7cLO7dwzwPbJSdWU5kJj26Jwp40OuRkQku/V1Deo3wB6gHPh2UvtR4Hfpvknww95ngu0DwJU97HcncGe6rzvSTBxXyOzJ41i9qY7PXD4z7HJERLJaX9egtpvZTqDB3Xu73iRpqq4q54fPbaOhpZ2SgnRXOxERyT19XoMKTrM1mpnOSQ2Bmso4bR3OC29plV0Rkd6k+0/4ZmCtmT0FNHQ1uvtnM1LVKHbR9AkU50dZvbmOq+ZMCrscEZGslW5A/Sq4ySAVxKJceqZW2RUR6Uu6CxYuM7N8oCpo2ujubZkra3Srroqz8s19bD/QwBmnaVJ4EZFU0l2w8HJgM/Bd4H5gk5lVZ66s0a2mKg7AavWiRER6lO4Pdb8NfMjda9y9GlgA/FPmyhrdppeXcHpZsU7ziYj0It2AynP3jV0P3H0TkJeZknJDdVU5L7x1gNZ2rbIrIpJKugFVa2Y/MLPLg9u/AGv6PEp6VFM1kYbWDtZs73PVEhGRnJRuQH0GWAd8lsQChOuBP89UUbng0pmnEYuYTvOJiPQg3YD6C3e/190/5u4fdfd/IhFaMkBjCmJcdMYEDZQQEelBxmYzl77VzIqzfs8R9h1tDrsUEZGs09eKujeY2S+BGd1W032Ggc9mLoHqysRw82c3aZVdEZHuhmU2c0ltzuRxlI/JZ/XmOj5+0dSwyxERySp9zmYObDezq4Amd+80syrgbGDtcBQ4mkUiRnVlnGc21WmVXRGRbtK9BrUaKDSzCmAl8Gngx5kqKpdUV8U52NDKG7sPh12KiEhWSTegzN0bgY8B/8vdPwrMyVxZueP9x1fZ1Wg+EZFkaQeUmV0K/CEnZjXXantDoHxMAedVjGe1BkqIiJwk3YC6DVgK/Nzd15nZmcDTGasqx1RXlbPmnUMcadYE8SIiXdIKKHdf5e4fcfe7g8dbtVjh0KmpmkhHp/ObLRq5LyLSpdfTdGZ2n7vfFvwWyrs/7+4fyVhlOWTu6aWMKYixenMd15z7nrDLERHJCn1dR/q34P4fM11ILsuLRnjfzNNYtbEOd8dMw81FRHo9xefua4L7VSQmiF0fnO5bFbT1yMwKzexlM3vdzNaZ2deC9jIze8rMNgf3E5KOWWpmW8xso5ktGPzHGzlqZsXZVd/E1v0NYZciIpIV+prqyMzs78xsP/AmiZV068zsq2m8dgtwhbufD1wAXGNmlwB3ACvdvZLEb6ruCN5rDrAYOAe4BrjfzKID/FwjTte0RxpuLiKS0NcgiduAy4D3uvtp7j4BuBi4zMw+19uBnnAseJgX3BxYCCwL2pcBi4LthcBD7t7i7tuALcD8/n2ckWtaWTFnlpdo+Q0RkUBfAfXHwA1BYACJEXzAp4LnemVmUTN7DdgHPOXuLwGT3H1P8Fp7gInB7hXAjqTDdwZt3V/zJjOrNbPaurrR9Zd5dVWcF7ceoLmtI+xSRERC11dA5bn7Kb8gdfc60ljy3d073P0CYCow38zO7WX3VCMDUo0cfMDd57n7vHg83lcJI0pNVZzmtk5q39YquyIifY3iax3gcydx9/pgiY5rgL1mNtnd95jZZBK9K0j0mKYlHTYV2J3ue4wGF59ZRtTgL35SS0NLB1NKi7h9wSwWzT2lIykiMur11YM638yOpLgdBc7r7UAzi5tZabBdBFxFYqDFCk4sgLgEeCTYXgEsNrMCM5sBVAIvD+hTjVBPrtuLA8daOnBgV30TSx9eyy9e3RV2aSIiw66v5TYGM4puMrAsGIkXAZa7+6Nm9gKw3MxuBN4BPhG81zozW05iOHs7cLO759TFmHue2Ehnt5OaTW0d3PPERvWiRCTnZGzCV3f/HTA3RfsB4MoejrkTuDNTNWW73fVN/WoXERnN0p0sVobBlNKifrWLiIxmCqgscvuCWRTlnXxWtSgvyu0LZoVUkYhIeLSmUxbpus50zxMb2RWc1rupeoauP4lITlIPKsssmlvB83dcwfqvL2DSuAKe2bSfzu4jJ0REcoACKksV58e4fcHZvL6jnhWv59TPwUREAAVUVvvY3ArOqxjP3Y+/SVNrTo24FxFRQGWzSMT4yvVz2HO4mQdWbw27HBGRYaWAynLzZ5Rx3XmT+d6qt3j3cHPY5YiIDBsF1Ahwx7Vn09Hp/MMTb4ZdiojIsFFAjQDTyoq58QMzePiVXfxuZ33Y5YiIDAsF1Ajxl5fPpHxMPl//5XrcNexcREY/BdQIMbYwjy98aBa12w/x2Np3wy5HRCTjFFAjyCfmTWP25HF86z83aNVdERn1FFAjSDRifOX62ew81MQPn98WdjkiIhmlgBph3jeznKvnTOK7v97CvqMadi4io5cCagT60odn09rRyb1Pbgq7FBGRjFFAjUAzyktYcul0/r12B+t2Hw67HBGRjFBAjVC3XFlJaVEe33hUw85FZHRSQI1Q44vy+Ourq3hx60GeXL837HJERIacAmoEu2H+6VROHMM3H9tAS7uGnYvI6KKAGsFi0Qhfvn4O2w808q+/2R52OSIiQ0oBNcLVVMW5fFac//nrzRw41hJ2OSIiQyZjAWVm08zsaTPbYGbrzOzWoL3MzJ4ys83B/YSkY5aa2RYz22hmCzJV22jz5etm09jawX3/tTnsUkREhkwme1DtwOfdfTZwCXCzmc0B7gBWunslsDJ4TPDcYuAc4BrgfjOLZrC+UeOsiWP51MWn8+BL29m092jY5YiIDImMBZS773H3V4Lto8AGoAJYCCwLdlsGLAq2FwIPuXuLu28DtgDzM1XfaHPbVVWMKYhp2LmIjBrDcg3KzKYDc4GXgEnuvgcSIQZMDHarAHYkHbYzaOv+WjeZWa2Z1dbV1WW07pFkQkk+t15VxbOb9/PMRn0vIjLyZTygzGwM8B/Abe5+pLddU7Sd0hVw9wfcfZ67z4vH40NV5qjwR5ecwYzyEv7+V+tp6+gMuxwRkUHJaECZWR6JcHrQ3R8Omvea2eTg+cnAvqB9JzAt6fCpwO5M1jfa5Mci/O2HZ/NWXQMPvqhh5yIysmVyFJ8BPwA2uPu9SU+tAJYE20uAR5LaF5tZgZnNACqBlzNV32h15eyJXHbWady3cjP1ja1hlyMiMmCZ7EFdBvwRcIWZvRbcPgzcBVxtZpuBq4PHuPs6YDmwHngcuNndNT1CP5kZX75uDkea2vjOSg07F5GRK5apF3b350h9XQngyh6OuRO4M1M15YrZk8fxB+89nX97YTufuuQMZsbHhF2SiEi/aSaJUerzH6qiMC/KN3+1IexSREQGRAE1SpWPKeCvrjiLlW/u49nNGnYuIiOPAmoU+/Rl05lWVsTfP7qBdg07F5ERRgE1ihXEonzp2tls3HuUf6/d0fcBIiJZRAE1yl1z7nuYP6OMe5/cxJHmtrDLERFJmwJqlDMzvnLdHA42tvLdX28JuxwRkbQpoHLAeVPH8/ELp/Kj599m+4GGsMsREUmLAipH3L5gFrGo8a3H3gy7FBGRtCigcsSkcYV8pmYmj697lxe3Hgi7HBGRPimgcsifVZ/JlPGFfOPR9XR0as0oEcluCqgcUpgX5W+uPZt1u4/wH6/sDLscEZFeKaByzEfOn8Lc00u554mNHGtpD7scEZEeKaByjJnx1evnUHe0he8981bY5YiI9EgBlYPmnj6BhRdM4YFnt7LzUGPY5YiIpKSAylF/c83ZRAzufnxj2KWIiKSkgMpRU0qLuOkDZ/LL13ezZvvBsMsRETmFAiqH/XnNTCaNK+Drj26gU8PORSTLKKByWElBjNsXnM3rO+pZ8frusMsRETmJAirHfWxuBedVjOfux9+kqbUj7HJERI5TQOW4SMT4yvVz2HO4mQdWbw27HBGR4xRQwvwZZVx33mS+t+ot3j3cHHY5IiKAAkoCd1x7Nh2dzj88odnORSQ7ZCygzOyHZrbPzN5Iaiszs6fMbHNwPyHpuaVmtsXMNprZgkzVJalNKyvmT94/g4df2cXrO+rDLkdEJKM9qB8D13RruwNY6e6VwMrgMWY2B1gMnBMcc7+ZRTNYm6Rw8wdnUj4mn288uh53DTsXkXBlLKDcfTXQ/RegC4FlwfYyYFFS+0Pu3uLu24AtwPxM1SapjS3M4/MfmkXt9kP8au2esMsRkRw33NegJrn7HoDgfmLQXgHsSNpvZ9Amw+z3503j7PeM5VuPvUlzm4adi0h4smWQhKVoS3mOycxuMrNaM6utq6vLcFm5JxpJzHa+q76JHzy3LexyRCSHDXdA7TWzyQDB/b6gfScwLWm/qUDKqQ3c/QF3n+fu8+LxeEaLzVXvO6ucq+dM4v6nt7DvqIadi0g4hjugVgBLgu0lwCNJ7YvNrMDMZgCVwMvDXJsk+dKHZ9Pa0cm3n9gUdikikqMyOcz8p8ALwCwz22lmNwJ3AVeb2Wbg6uAx7r4OWA6sBx4HbnZ3XQAJ0YzyEpZcOp3la3awbvfhsMsRkRxkI3k48bx587y2tjbsMkatw01tXH7P08x6z1h++meXYJbqUqGIyOCY2Rp3n9e9PRZGMTIyjC/K43NXV/HVR9Zx0d//F4caWplSWsTtC2axaK4GWYpIZimgpFdj8qMYcLChFYBd9U0sfXgtgEJKRDJKASW9+vZTm08Z79/U1sHXH13PlNIiykryKSvJp7Qoj0hEpwBFZOgooKRXu+ubUrYfbGjl9//PC8cfRwwmFOczIQissuJ8ysYE9yWpb4V5A5/N6hev7uKeJzayu75Jpx1FRikFlPRqSmkRu1KEVHxsAff+/vkcbGjlYEMrhxpaORBsH2xo5a26Y9RuT2z3tJp8cX701ODqIdhOKylgbGGMSMT4xau7WPrwWpqCmS502lFkdFJASa9uXzDrpDAAKMqL8rcfns0HKvv+oXRnp3Okue2k8Ep1O3Cslc17j3GwofWk90oWjRgTivOpb2ylvVvqNbV18LVfrmN8UR6lxXmJ047F+YwrjGn0ocgIpYCSXnX1SAZ6Oi0SMUqLE2ExM82JP5paOzjY2MrBY62J+4YWDja0Bfet/PTlHSmPO9TYxqd//NuT2qIRozQIrQlBHWUlJ7YnFOcdv59Qkh+055EXHdhPBHXqUWToKKCkT4vmVgzrX7JF+VEq8ouoKC1K+fzqTftTnnacNK6Af/7URdQ3tnKwoY36xlYONbZyqDHYbmhj56FG1u5KtLW2d/ZYw9iCGKVJQVZ2PMjymVCSFGrBdbcJxXk88ca7fOnnb+jUo8gQUUDJiNPTacel187mwtMn9HLkCe5OU1sHhxrbONTQSn1jWxBmiSA71NgaBFwi3N7e38ChhlaOtrT3q9amtg7+9udr2bj3KGMKYowrjDGmMMbYgjzGBtvjCoPtghixAfbceqNenYxUCigZcQZ72hHAzCjOj1GcH+uxp5ZKW0cn9V09ssaTg+yu/3wz5TENrR18/9mttHX0PWtLUV40EWCFMcYW5jG2IHY8vMYGQdZ1G1Nw8uOxhXmMKYhRnB89ft1NA0pkJNNURyJD5LK7fp3y1GNFaRHP/c0HaWnv5GhzO8da2jna3MbR5vbg1ha0ndg+0tzOseYT+3U9fyyNHlw0YowpSITa3iPNpwwoARhbGOOWK86iOD92PNTGFMQoLogxpiBKcX6MkoIYJfnRjPTqQD07OUFTHYlkWE+nHm9fMAszozAvSmFelPjYggG/R2enc6w1CKuuAEsOt+YTQXakuY2HX9mV8nWONrfzzcdS9/i6K4hFEmFVEKUkCK7jgZYfBFrBiaBLBFuwf4rtwrwIj7y2Wz076ZMCSmSIDMWpx75EIsa4wjzGFealtf9LWw+m7NVNKS3kyc/V0NiSCLPG1o7gvp1jLR0ntTe0tNPQ2k5Dy4nto83tvHu4+fhxDS3tKXtqKT+DgfupK5I2tXWw9OG1vLTtwEk9uJN6dUlhlxyS+bGh6eWpV5ddFFAiQ2i4Rzz2pade3RcXnH38NODEIXqvlvYOGls6Tgm8hpYg3JJC7n8/vSXlazS1dfBfG/bR2NJOQ2v6K+7kRe2k3lpxfs89vuSA63q+pCDKC28d4J+e2kRzMLozW3p1uRyaugYlMspl419wvV2ve/6OK4DE6cymtpODLblHdyIME2GW6PV1HH/cEPTsko9pbuv5pwU9iRpMLy+hOD9GUX6U4uBWlBc7sX38PkZxXnJb7KTni/MSr5Fuj6/7IBdI/APjWx87L/T/hkP5/5WuQYnkqGzr1UHv1+u6RCJBr6ggBmOH5n07Ov14uDUk9e4aW9u5cVnqf+x2OJw9eRxNrYn9DjW0sutQB42tHTS1Jdr6G3yxiCWFXYyivJODrisMV7y265SZVbpmTYlGjLyokReNEItGyItY4v54W+I+L5LYjkWN/GDfWCSxPdAJnodrdKgCSkSG3XBcr0sl2ss1vIoe5p2sKC3iu5+8sNfX7ertNbZ2JIKsrf34dkNL+/HnEm3tSdsdNLadaDva3M6+Iy00trXT1NrBsZbUpzkPNbZxy09fHdiXkCRiEItGguAyYpFuAReJkBc70R6LRMiLRXh564Hjp0K7NLV1cM8TGxVQIjLyZVvPLp1eXU9O6u0NoZ5OhU4aV8CDf3oxbR1OW0cnbR1Oe3Df1tlJ+/H2xHZ7ZyetwT7tHU7rSe3BdkfSPp1d+5y6f2NTxynh1KWn1Q8GSgElIkJ4vbre9DZrylkTh+i85wD0FJxT+vGj93QooEREAtnWq8vG0ITB9Tb7QwElIpLFsi00YfiCUwElIiL9NhzBmZlJtkRERAYp6wLKzK4xs41mtsXM7gi7HhERCUdWBZSZRYHvAtcCc4AbzGxOuFWJiEgYsiqggPnAFnff6u6twEPAwpBrEhGREGRbQFUAO5Ie7wzajjOzm8ys1sxq6+rqhrU4EREZPtkWUKkmhjppNlt3f8Dd57n7vHg8PkxliYjIcMu2YeY7gWlJj6cCu3vaec2aNfvNbHvGqwpHObA/7CJGAH1P6dN3lT59V+kbiu/qjFSNWbXchpnFgE3AlcAu4LfAJ919XaiFhcDMalNNPy8n0/eUPn1X6dN3lb5MfldZ1YNy93Yz+yvgCSAK/DAXw0lERLIsoADc/THgsbDrEBGRcGXbIAk54YGwCxgh9D2lT99V+vRdpS9j31VWXYMSERHpoh6UiIhkJQWUiIhkJQVUFjGzaWb2tJltMLN1ZnZr2DVlOzOLmtmrZvZo2LVkMzMrNbOfmdmbwf9fl4ZdUzYys88Ff/beMLOfmllh2DVlEzP7oZntM7M3ktrKzOwpM9sc3E8YqvdTQGWXduDz7j4buAS4WZPl9ulWYEPYRYwA3wEed/ezgfPRd3YKM6sAPgvMc/dzSfzUZXG4VWWdHwPXdGu7A1jp7pXAyuDxkFBAZRF33+PurwTbR0n8JZJdS2lmETObClwHfD/sWrKZmY0DqoEfALh7q7vXh1pU9ooBRcGkAcX0MpNNLnL31cDBbs0LgWXB9jJg0VC9nwIqS5nZdGAu8FLIpWSz+4AvAp0h15HtzgTqgB8Fp0O/b2YlYReVbdx9F/CPwDvAHuCwuz8ZblUjwiR33wOJf2QDE4fqhRVQWcjMxgD/Adzm7kfCricbmdn1wD53XxN2LSNADLgQ+Gd3nws0MISnYUaL4NrJQmAGMAUoMbNPhVtVblNAZRkzyyMRTg+6+8Nh15PFLgM+YmZvk1g37Aoz+0m4JWWtncBOd+/qjf+MRGDJya4Ctrl7nbu3AQ8D7wu5ppFgr5lNBgju9w3VCyugsoiZGYnrBBvc/d6w68lm7r7U3ae6+3QSF7J/7e76124K7v4usMPMZgVNVwLrQywpW70DXGJmxcGfxSvRYJJ0rACWBNtLgEeG6oWzbi6+HHcZ8EfAWjN7LWj7UjA/ochg3AI8aGb5wFbg0yHXk3Xc/SUz+xnwCokRta+iKY9OYmY/BS4Hys1sJ/A/gLuA5WZ2I4mQ/8SQvZ+mOhIRkWykU3wiIpKVFFAiIpKVFFAiIpKVFFAiIpKVFFAiIpKVFFCSE8zMzezbSY+/YGZ/N0Sv/WMz+29D8Vp9vM8ngpnIn85kXWY23cw+2f8KRYaWAkpyRQvwMTMrD7uQZGYW7cfuNwJ/6e4fzFQ9gelAvwKqn59DJC0KKMkV7SR+dPm57k9072mY2bHg/nIzW2Vmy81sk5ndZWZ/aGYvm9laM5uZ9DJXmdmzwX7XB8dHzeweM/utmf3OzP486XWfNrP/C6xNUc8Nweu/YWZ3B21fBd4PfM/M7klxzBeDY143s7tSPP92Vzib2TwzeybYrjGz14Lbq2Y2lsQPLz8QtH0u3c9hZiVm9qughjfM7A/S+Q8j0hPNJCG55LvA78zsH/pxzPnAbBJLDGwFvu/u8y2xmOQtwG3BftOBGmAm8LSZnQX8MYkZsd9rZgXA82bWNTv2fOBcd9+W/GZmNgW4G7gIOAQ8aWaL3P3rZnYF8AV3r+12zLUklji42N0bzaysH5/vC8DN7v58MElxM4mJZL/g7l1Be1M6n8PMPg7sdvfrguPG96MOkVOoByU5I5gZ/l9JLEqXrt8G63S1AG8BXX8xryURSl2Wu3unu28mEWRnAx8C/jiYtuol4DSgMtj/5e7hFHgv8EwwYWk78CCJtZx6cxXwI3dvDD5n9/V6evM8cK+ZfRYoDd6zu3Q/x1oSPcm7zewD7n64H3WInEIBJbnmPhLXcpLXQ2on+LMQTBKan/RcS9J2Z9LjTk4+A9F9zjAHDLjF3S8IbjOS1hdq6KE+S/NzdD+mrznLjn9G4Pgy5u5+F/CnQBHwopmd3cPr9/k53H0TiZ7fWuBbwWlJkQFTQElOCXoXy0mEVJe3SfzFCon1gPIG8NKfMLNIcF3qTGAj8ATwmWAJFcysKo2FAl8CasysPBh4cAOwqo9jngT+xMyKg/dJdYrvbU58xo93NZrZTHdf6+53A7Uken5HgbFJx6b1OYLTk43u/hMSC/9pSQ8ZFF2Dklz0beCvkh7/C/CImb0MrKTn3k1vNpIIkknAX7h7s5l9n8RpwFeCnlkdfSyH7e57zGwp8DSJnstj7t7r8gXu/riZXQDUmlkr8BjwpW67fQ34gZl9iZNXab7NzD4IdJBYguM/SfQO283sdeDHwHfS/BznAfeYWSfQBnymt7pF+qLZzEVEJCvpFJ+IiGQlBZSIiGQlBZSIiGQlBZSIiGQlBZSIiGQlBZSIiGQlBZSIiGSl/w9GJA9+rYgUAAAAAABJRU5ErkJggg==\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#可以使用图形工具基于群内SSE用所谓的肘法来评估给定任务的最佳集群数k。直观地说，如果k增大，失真会减小。这是因为样本将接近它们被分配的中心。肘法的逻辑是识别当失真增速最快时的k值，如果为不同k值绘制失真图，情况就会变得更清楚：\n",
    "distortions = []\n",
    "for i in range(1, 11):\n",
    "    km = KMeans(n_clusters=i,\n",
    "                init='k-means++',\n",
    "                n_init=10,\n",
    "                max_iter=300,\n",
    "                random_state=0)\n",
    "    km.fit(X)\n",
    "    distortions.append(km.inertia_)\n",
    "plt.plot(range(1, 11), distortions, marker='o')\n",
    "plt.xlabel('Number of clusters')\n",
    "plt.ylabel('Distortion')\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_03.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 通过轮廓图分析聚类质量\n",
    "![](picture/轮廓图.png)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from matplotlib import cm\n",
    "from sklearn.metrics import silhouette_samples\n",
    "\n",
    "km = KMeans(n_clusters=3,\n",
    "            init='k-means++',\n",
    "            n_init=10,\n",
    "            max_iter=300,\n",
    "            tol=1e-04,\n",
    "            random_state=0)\n",
    "y_km = km.fit_predict(X)\n",
    "\n",
    "cluster_labels = np.unique(y_km)\n",
    "n_clusters = cluster_labels.shape[0]\n",
    "silhouette_vals = silhouette_samples(X, y_km, metric='euclidean')  #计算每个样本的轮廓系数\n",
    "y_ax_lower, y_ax_upper = 0, 0\n",
    "yticks = []\n",
    "for i, c in enumerate(cluster_labels):\n",
    "    c_silhouette_vals = silhouette_vals[y_km == c]\n",
    "    c_silhouette_vals.sort()\n",
    "    y_ax_upper += len(c_silhouette_vals)\n",
    "    color = cm.jet(float(i) / n_clusters)\n",
    "    plt.barh(range(y_ax_lower, y_ax_upper), c_silhouette_vals, height=1.0,\n",
    "             edgecolor='none', color=color)\n",
    "\n",
    "    yticks.append((y_ax_lower + y_ax_upper) / 2.)\n",
    "    y_ax_lower += len(c_silhouette_vals)\n",
    "\n",
    "silhouette_avg = np.mean(silhouette_vals)\n",
    "plt.axvline(silhouette_avg, color=\"red\", linestyle=\"--\")\n",
    "\n",
    "plt.yticks(yticks, cluster_labels + 1)\n",
    "plt.ylabel('Cluster')\n",
    "plt.xlabel('Silhouette coefficient')\n",
    "\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_04.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#分两类\n",
    "km = KMeans(n_clusters=2,\n",
    "            init='k-means++',\n",
    "            n_init=10,\n",
    "            max_iter=300,\n",
    "            tol=1e-04,\n",
    "            random_state=0)\n",
    "y_km = km.fit_predict(X)\n",
    "\n",
    "plt.scatter(X[y_km == 0, 0],\n",
    "            X[y_km == 0, 1],\n",
    "            s=50,\n",
    "            c='lightgreen',\n",
    "            edgecolor='black',\n",
    "            marker='s',\n",
    "            label='cluster 1')\n",
    "plt.scatter(X[y_km == 1, 0],\n",
    "            X[y_km == 1, 1],\n",
    "            s=50,\n",
    "            c='orange',\n",
    "            edgecolor='black',\n",
    "            marker='o',\n",
    "            label='cluster 2')\n",
    "\n",
    "plt.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1],\n",
    "            s=250, marker='*', c='red', label='centroids')\n",
    "plt.legend()\n",
    "plt.grid()\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_05.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "cluster_labels = np.unique(y_km)\n",
    "n_clusters = cluster_labels.shape[0]\n",
    "silhouette_vals = silhouette_samples(X, y_km, metric='euclidean')\n",
    "y_ax_lower, y_ax_upper = 0, 0\n",
    "yticks = []\n",
    "for i, c in enumerate(cluster_labels):\n",
    "    c_silhouette_vals = silhouette_vals[y_km == c]\n",
    "    c_silhouette_vals.sort()\n",
    "    y_ax_upper += len(c_silhouette_vals)\n",
    "    color = cm.jet(float(i) / n_clusters)\n",
    "    plt.barh(range(y_ax_lower, y_ax_upper), c_silhouette_vals, height=1.0,\n",
    "             edgecolor='none', color=color)\n",
    "\n",
    "    yticks.append((y_ax_lower + y_ax_upper) / 2.)\n",
    "    y_ax_lower += len(c_silhouette_vals)\n",
    "\n",
    "silhouette_avg = np.mean(silhouette_vals)\n",
    "plt.axvline(silhouette_avg, color=\"red\", linestyle=\"--\")\n",
    "\n",
    "plt.yticks(yticks, cluster_labels + 1)\n",
    "plt.ylabel('Cluster')\n",
    "plt.xlabel('Silhouette coefficient')\n",
    "\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_06.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## 层次聚类\n",
    "![](picture/层次聚类.png)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "data": {
      "text/plain": "             X         Y         Z\nID_0  6.964692  2.861393  2.268515\nID_1  5.513148  7.194690  4.231065\nID_2  9.807642  6.848297  4.809319\nID_3  3.921175  3.431780  7.290497\nID_4  4.385722  0.596779  3.980443",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>X</th>\n      <th>Y</th>\n      <th>Z</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>ID_0</th>\n      <td>6.964692</td>\n      <td>2.861393</td>\n      <td>2.268515</td>\n    </tr>\n    <tr>\n      <th>ID_1</th>\n      <td>5.513148</td>\n      <td>7.194690</td>\n      <td>4.231065</td>\n    </tr>\n    <tr>\n      <th>ID_2</th>\n      <td>9.807642</td>\n      <td>6.848297</td>\n      <td>4.809319</td>\n    </tr>\n    <tr>\n      <th>ID_3</th>\n      <td>3.921175</td>\n      <td>3.431780</td>\n      <td>7.290497</td>\n    </tr>\n    <tr>\n      <th>ID_4</th>\n      <td>4.385722</td>\n      <td>0.596779</td>\n      <td>3.980443</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "np.random.seed(123)\n",
    "\n",
    "variables = ['X', 'Y', 'Z']\n",
    "labels = ['ID_0', 'ID_1', 'ID_2', 'ID_3', 'ID_4']\n",
    "\n",
    "X = np.random.random_sample([5, 3]) * 10\n",
    "df = pd.DataFrame(X, columns=variables, index=labels)\n",
    "df"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "data": {
      "text/plain": "          ID_0      ID_1      ID_2      ID_3      ID_4\nID_0  0.000000  4.973534  5.516653  5.899885  3.835396\nID_1  4.973534  0.000000  4.347073  5.104311  6.698233\nID_2  5.516653  4.347073  0.000000  7.244262  8.316594\nID_3  5.899885  5.104311  7.244262  0.000000  4.382864\nID_4  3.835396  6.698233  8.316594  4.382864  0.000000",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>ID_0</th>\n      <th>ID_1</th>\n      <th>ID_2</th>\n      <th>ID_3</th>\n      <th>ID_4</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>ID_0</th>\n      <td>0.000000</td>\n      <td>4.973534</td>\n      <td>5.516653</td>\n      <td>5.899885</td>\n      <td>3.835396</td>\n    </tr>\n    <tr>\n      <th>ID_1</th>\n      <td>4.973534</td>\n      <td>0.000000</td>\n      <td>4.347073</td>\n      <td>5.104311</td>\n      <td>6.698233</td>\n    </tr>\n    <tr>\n      <th>ID_2</th>\n      <td>5.516653</td>\n      <td>4.347073</td>\n      <td>0.000000</td>\n      <td>7.244262</td>\n      <td>8.316594</td>\n    </tr>\n    <tr>\n      <th>ID_3</th>\n      <td>5.899885</td>\n      <td>5.104311</td>\n      <td>7.244262</td>\n      <td>0.000000</td>\n      <td>4.382864</td>\n    </tr>\n    <tr>\n      <th>ID_4</th>\n      <td>3.835396</td>\n      <td>6.698233</td>\n      <td>8.316594</td>\n      <td>4.382864</td>\n      <td>0.000000</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算距离矩阵\n",
    "from scipy.spatial.distance import pdist, squareform\n",
    "\n",
    "row_dist = pd.DataFrame(squareform(pdist(df, metric='euclidean')),\n",
    "                        columns=labels,\n",
    "                        index=labels)\n",
    "row_dist"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "data": {
      "text/plain": "           row label 1  row label 2  distance  no. of items in clust.\ncluster 1          0.0          4.0  3.835396                     2.0\ncluster 2          1.0          2.0  4.347073                     2.0\ncluster 3          3.0          5.0  5.899885                     3.0\ncluster 4          6.0          7.0  8.316594                     5.0",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>row label 1</th>\n      <th>row label 2</th>\n      <th>distance</th>\n      <th>no. of items in clust.</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>cluster 1</th>\n      <td>0.0</td>\n      <td>4.0</td>\n      <td>3.835396</td>\n      <td>2.0</td>\n    </tr>\n    <tr>\n      <th>cluster 2</th>\n      <td>1.0</td>\n      <td>2.0</td>\n      <td>4.347073</td>\n      <td>2.0</td>\n    </tr>\n    <tr>\n      <th>cluster 3</th>\n      <td>3.0</td>\n      <td>5.0</td>\n      <td>5.899885</td>\n      <td>3.0</td>\n    </tr>\n    <tr>\n      <th>cluster 4</th>\n      <td>6.0</td>\n      <td>7.0</td>\n      <td>8.316594</td>\n      <td>5.0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#使用全连接的方式处理集群\n",
    "from scipy.cluster.hierarchy import linkage, dendrogram\n",
    "\n",
    "row_clusters = linkage(pdist(df, metric='euclidean'), method='complete')\n",
    "pd.DataFrame(row_clusters,\n",
    "             columns=['row label 1', 'row label 2',\n",
    "                      'distance', 'no. of items in clust.'],\n",
    "             index=['cluster %d' % (i + 1)\n",
    "                    for i in range(row_clusters.shape[0])])\n",
    "#连接矩阵由若干行组成，其中每行代表一个合并。第一列和第二列代表每个集群中相似度最低的成员，第三列报告这些成员之间的距离。最后一列返回每个集群成员的个数。"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画树图\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# make dendrogram black (part 1/2)\n",
    "# set_link_color_palette(['black'])\n",
    "\n",
    "row_dendr = dendrogram(row_clusters,\n",
    "                       labels=labels,\n",
    "                       # make dendrogram black (part 2/2)\n",
    "                       # color_threshold=np.inf\n",
    "                       )\n",
    "plt.tight_layout()\n",
    "plt.ylabel('Euclidean distance')\n",
    "#plt.savefig('images/11_11.png', dpi=300,\n",
    "#            bbox_inches='tight')\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/b6/sj0f93ps3rn4fdfsd4mkgj_00000gn/T/ipykernel_7806/528649229.py:23: UserWarning: FixedFormatter should only be used together with FixedLocator\n",
      "  axm.set_xticklabels([''] + list(df_rowclust.columns))\n",
      "/var/folders/b6/sj0f93ps3rn4fdfsd4mkgj_00000gn/T/ipykernel_7806/528649229.py:24: UserWarning: FixedFormatter should only be used together with FixedLocator\n",
      "  axm.set_yticklabels([''] + list(df_rowclust.index))\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 576x576 with 3 Axes>",
      "image/png": "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\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "##添加热度图和树状图\n",
    "# plot row dendrogram\n",
    "fig = plt.figure(figsize=(8, 8), facecolor='white')\n",
    "axd = fig.add_axes([0.09, 0.1, 0.2, 0.6])\n",
    "\n",
    "# note: for matplotlib < v1.5.1, please use orientation='right'\n",
    "row_dendr = dendrogram(row_clusters, orientation='left')\n",
    "\n",
    "# reorder data with respect to clustering\n",
    "df_rowclust = df.iloc[row_dendr['leaves'][::-1]]\n",
    "\n",
    "axd.set_xticks([])\n",
    "axd.set_yticks([])\n",
    "\n",
    "# remove axes spines from dendrogram\n",
    "for i in axd.spines.values():\n",
    "    i.set_visible(False)\n",
    "\n",
    "# plot heatmap\n",
    "axm = fig.add_axes([0.23, 0.1, 0.6, 0.6])  # x-pos, y-pos, width, height\n",
    "cax = axm.matshow(df_rowclust, interpolation='nearest', cmap='hot_r')\n",
    "fig.colorbar(cax)\n",
    "axm.set_xticklabels([''] + list(df_rowclust.columns))\n",
    "axm.set_yticklabels([''] + list(df_rowclust.index))\n",
    "\n",
    "#plt.savefig('images/11_12.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cluser labesl :[1 0 0 2 1]\n"
     ]
    }
   ],
   "source": [
    "# 使用sklearn\n",
    "from sklearn.cluster import AgglomerativeClustering\n",
    "\n",
    "ac = AgglomerativeClustering(n_clusters=3,\n",
    "                             affinity=\"euclidean\",\n",
    "                             linkage='complete')\n",
    "labels = ac.fit_predict(X)\n",
    "print(\"Cluser labesl :%s\" % labels)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cluser labesl :[0 1 1 0 0]\n"
     ]
    }
   ],
   "source": [
    "# 使用sklearn\n",
    "from sklearn.cluster import AgglomerativeClustering\n",
    "\n",
    "ac = AgglomerativeClustering(n_clusters=2,\n",
    "                             affinity=\"euclidean\",\n",
    "                             linkage='complete')\n",
    "labels = ac.fit_predict(X)\n",
    "print(\"Cluser labesl :%s\" % labels)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "## DBSCAN聚类\n",
    "![](picture/DBSCAN.png)\n",
    "![](picture/DBSCAN@.png)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import make_moons\n",
    "\n",
    "X, y = make_moons(n_samples=200, noise=0.05, random_state=0)\n",
    "plt.scatter(X[:, 0], X[:, 1])\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_14.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 576x216 with 2 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#使用kmeans聚类做半月求数据\n",
    "from sklearn.cluster import KMeans, DBSCAN\n",
    "\n",
    "f, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 3))\n",
    "\n",
    "km = KMeans(n_clusters=2, random_state=0)\n",
    "y_km = km.fit_predict(X)\n",
    "ax1.scatter(X[y_km == 0, 0], X[y_km == 0, 1],\n",
    "            edgecolor='black',\n",
    "            c='lightblue', marker='o', s=40, label='cluster 1')\n",
    "ax1.scatter(X[y_km == 1, 0], X[y_km == 1, 1],\n",
    "            edgecolor='black',\n",
    "            c='red', marker='s', s=40, label='cluster 2')\n",
    "ax1.set_title('K-means clustering')\n",
    "\n",
    "ac = AgglomerativeClustering(n_clusters=2,\n",
    "                             affinity='euclidean',\n",
    "                             linkage='complete')\n",
    "y_ac = ac.fit_predict(X)\n",
    "ax2.scatter(X[y_ac == 0, 0], X[y_ac == 0, 1], c='lightblue',\n",
    "            edgecolor='black',\n",
    "            marker='o', s=40, label='cluster 1')\n",
    "ax2.scatter(X[y_ac == 1, 0], X[y_ac == 1, 1], c='red',\n",
    "            edgecolor='black',\n",
    "            marker='s', s=40, label='cluster 2')\n",
    "ax2.set_title('Agglomerative clustering')\n",
    "\n",
    "plt.legend()\n",
    "plt.tight_layout()\n",
    "# plt.savefig('images/11_15.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#使用DBSCAN聚类的方法\n",
    "db = DBSCAN(eps=0.2, min_samples=5, metric='euclidean')\n",
    "y_db = db.fit_predict(X)\n",
    "plt.scatter(X[y_db == 0, 0], X[y_db == 0, 1],\n",
    "            c='lightblue', marker='o', s=40,\n",
    "            edgecolor='black',\n",
    "            label='cluster 1')\n",
    "plt.scatter(X[y_db == 1, 0], X[y_db == 1, 1],\n",
    "            c='red', marker='s', s=40,\n",
    "            edgecolor='black',\n",
    "            label='cluster 2')\n",
    "plt.legend()\n",
    "plt.tight_layout()\n",
    "#plt.savefig('images/11_16.png', dpi=300)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "# 总结\n",
    "从介绍基于原型的k-均值算法开始，该算法基于定义的集群中心点，把样本聚集成球形。因为聚类属于无监督学习方法，所以无法依靠标定清楚的分类标签来评估模型性能。因此，采用有内在联系的性能指标，如肘法或者轮廓分析法作为试图量化聚类质量的工具。\n",
    "接着讨论不同的聚类方法，即凝聚层次聚类。层次聚类不要求预先定义\n",
    "集群的数量，而且可以通过树状图完成结果的可视化，这有助于解释聚类的\n",
    "结果。本章最后看到的聚类算法是DBSCAN，该算法基于本地样本点的密度来聚集，能够处理离群点并发现非球状分布的集群。"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}